// 本地存储和异步存储
// 同步和异步的区别 
// 小程序本地存储 API 提供了同步和异步两种方式进行数据的读写操作。它们的主要区别在于执行操作时是否会阻塞主线程。

// 同步方式：在使用同步方式进行本地存储操作时，代码会阻塞主线程的执行，直到本地存储操作完成后才会继续执行后续代码。这意味着如果存储操作需要较长时间，会导致界面出现卡顿现象，影响用户体验。 

// 异步方式：在使用异步方式进行本地存储操作时，代码会立即返回，不会阻塞主线程的执行，而是通过回调函数或 Promise 来处理存储操作的结果。这样可以避免阻塞主线程，提高程序的流畅性和响应速度。

// 本地存储封装
export const setStorage = (key, value) => {
  try {
    wx.setStorageSync(key, value)
  } catch(error) {
    console.error(`存储指定${key}异常`, error)
  }
}

// 本地读取封装
export const getStorage = (key) => {
  try {
    const val = wx.getStorageSync(key)
    if(val) {
      return val
    }
  } catch(error) {
    console.error(`读取指定${key}异常`, error)
  }
}
// 本地移除key
export const removeStorage = (key) => {
  try {
    wx.removeStorage(key)
  } catch( erro ) {
    console.error(`移除指定${key}异常`, error)
  }
}

// 本地删除所有
export const clearStorage = () => {
  try {
    wx.clearStorageSync()
  } catch(error) {
    console.error(`清空本地数据异常`, error)
  }
}

// 异步保存
export const setStorageAsync = (key, data) => {
  return new Promise((resolve) => {
    wx.setStorage({
      key,
      data,
      complete: (res) => {
        //res是接口调用成功的结果 成功/失败
        resolve(res)
      }
    })
  })
}

// 封装异步获取数据
export const asyncGetStorage = (key) => {
  return new Promise((resolve)=>{
    wx.getStorage({
      key,
      complete (res) {
        resolve(res)
      }
    })
  })
}

// 异步从本地移除指定key数据
export const asyncRemoveStorage = (key) => {
  return new Promise((resolve)=>{
    wx.removeStorage({
      key,
      complete (res) {
        resolve(res)
      }
    })
  })
}

// 封装异步 清空本地数据
export const asyncClearStorage = () => {
  return new Promise((resolve)=>{
    wx.clearStorage({
      complete (res) {
        resolve(res)
      }
    })
  })
}










